package ModelLayer;

import java.util.ArrayList;

/**
 * VareContainer is a container for
 * vare and produktGruppe objects.
 * 
 * */
public class VareContainer {

	/**
	 * ArrayLists for ProduktGruppe and Vare
	 * */
	private ArrayList<Vare> vareList;
	private ArrayList<ProduktGruppe> produktGruppeList;
	
	/**
	 * Singleton of VareContainer
	 * */
	private static VareContainer instance;
	
	private VareContainer()
	{
		vareList = new ArrayList<Vare>();
		produktGruppeList = new ArrayList<ProduktGruppe>();
	}
	
	/**
	 * Singleton method
	 * */
	public static VareContainer getInstance()
	{
		if(instance == null){
			instance = new VareContainer();
		}
		return instance;
	}
	/**
	 * addVare method
	 * @param int artikelNr, int vaegt, float pris, String vareGruppe, String placering, int antal
	 * */
	public void createVare(int an, int va, float p, String vg, String pl, int antal)
	{
		Vare v = new Vare(an, va, p, vg, pl, antal);
		vareList.add(v);
		//Check if done can be removed after testing
		System.out.println("Vare added to list");
	}
	/**
	 * remove Vare from the arrayList.
	 * Find vare by artikelNr and remove that object.
	 * @param int artikelNr
	 * */
	public void removeVare(int an)
	{
		boolean search = false;
		int index = 0;
		Vare v = null;
		while(!search && index < vareList.size()){
			v = vareList.get(index);
			if(v.getArtikelNr() == an){
				search = true;
			}else{
				index++;
			}
		}//loop end
		if(search){
			vareList.remove(index);
		}
	}//removeVare end
	/**
	 * findVare method
	 * find vare by its artikelNr
	 * @param int artikelNr
	 * */
	public Vare findVare(int an)
	{
		boolean search = false;
		int index = 0;
		Vare v = null;
		while(!search && index < vareList.size()){
			v = vareList.get(index);
			if(v.getArtikelNr() == an){
				search = true;
			}else{
				index++;
			}
		}
		if(search){
			return v;
		}else{
			return null;
		}
	}
	/**
	 * Add a produktGruppe object
	 * to produktGruppeList
	 * @param String beskrivelse, int gruppeNr
	 * */
	public void createProduktGruppe(String bs, int gn)
	{
		ProduktGruppe pg = new ProduktGruppe(bs, gn);
		produktGruppeList.add(pg);
	}
	/**
	 * remove produktGruppe from produktGruppelist
	 * @param 
	 * */
	public void removeProduktGruppe(int gn)
	{
		boolean search = false;
		int index = 0;
		ProduktGruppe p = null;
		while(!search && index < produktGruppeList.size()){
			p = produktGruppeList.get(index);
			if(p.getGruppeNr() == gn){
				search = true;
			}else{
				index++;
			}
		}//loop end
		//remove index object from arrayList
		if(search){
			produktGruppeList.remove(index);
		}
	}//removeProduktGruppe end
	/**
	 * Find produktGruppe and add Vare to it.
	 * @param int gruppeNr, int artikelNr
	 * */
	public void addVareToProduktGruppe(int gn, int an)
	{
		/**
		 * Loop through produktGruppeList and get
		 * a produktGruppe Object to store in
		 * a temp produktGruppe.
		 * */
		boolean search = false;
		int index = 0;
		ProduktGruppe p = null;
		while(!search && index < produktGruppeList.size()){
			p = produktGruppeList.get(index);
			if(p.getGruppeNr() == gn){
				search = true;
			}else{
				index++;
			}
		}//Loop end
		//If search is a match then add the vare to the ProduktGruppe
		if(search){
			p.addVare(an);
		}
	}//AddVareToProduktGruppe method

	/**
	 * List of all Varer
	 * 
	 * */
	public ArrayList<Vare> listOfAllVarer()
	{
		return vareList;
	}
}
